package cn.marinda.resturants.service.impl;

import cn.marinda.resturants.entity.Staff;
import cn.marinda.resturants.global.Pages;
import cn.marinda.resturants.mapper.StaffMapper;
import cn.marinda.resturants.service.StaffService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.UUID;

/** 员工服务层实现类
 *
 * @date 2021/12/2
 * @author Marinda
 * @version 1.0
 *
 */
@Service("staffService")
public class StaffServiceImpl  extends ServiceImpl<StaffMapper,Staff> implements StaffService {


    /**
     * 返回所有用户
     *
     * @return 用户列表
     */
    @Override
    public List<Staff> queryList() {
        return baseMapper.selectList(null);
    }

    /**
     * 查询一个员工数据
     *
     * @param uid
     * @return
     */
    @Override
    public Staff selectByUid(String uid) {
        return baseMapper.selectById(uid);
    }

    /**
     * 分页Staff
     *
     * @param pages 传输page数据
     * @return 迭代的page
     */
    @Override
    public IPage<Staff> selectStaffPage(Pages pages) {
        IPage<Staff> iPage = baseMapper.selectPages(pages);
        return iPage;
    }
    /**
     * 添加一个用户
     *
     * @param staff 新用户
     * @return 结果
     */
    @Override
    public boolean addStaff(Staff staff) {
        staff.setUid(UUID.randomUUID().toString());
        return baseMapper.insert(staff)>0;
    }

    /**
     * 删除一个用户
     *
     * @param uid uid
     * @return 结果
     */
    @Override
    public boolean deleteStaff(String uid) {
        return baseMapper.deleteById(uid)>0;
    }

    /**
     * 修改一个用户
     *
     * @param staff 用户
     * @return 结果
     */
    @Override
    public boolean updateStaff(Staff staff) {
        Staff sqlStaff = baseMapper.selectById(staff.getUid());
        if(sqlStaff == null){
            return false;
        }
        staff.setVersion(sqlStaff.getVersion());
        return lambdaUpdate().eq(Staff::getUid,staff.getUid()).eq(Staff::getVersion,staff.getVersion()).set(Staff::getVersion,staff.getVersion()+1).update(staff);
    }

    /**
     * 模糊查询一批名称的
     *
     * @param likeName 模糊名称
     * @return 列表
     */
    @Override
    public List<Staff> selectNameLike(String likeName) {
        return baseMapper.selectNameLike(likeName);
    }

    /**
     * 员工加入日期区间列表
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 列表
     */
    @Override
    public List<Staff> selectJoinDateInterval(String startDate, String endDate) {
        return baseMapper.selectJoinDateInterval(startDate, endDate);
    }

    /**
     * 根据性别区间拿到员工 列表
     *
     * @param sex 性别
     * @return 员工列表
     */
    @Override
    public List<Staff> selectSexInterval(char sex) {
        return baseMapper.selectSexInterval(sex);
    }

    /**
     * 员工部门列表
     *
     * @param department 部门列表
     * @return 员工列表
     */
    @Override
    public List<Staff> selectDepartment(String department) {
        return baseMapper.selectDepartment(department);
    }

    /**
     * 查询手机号指定的员工
     *
     * @param phone 手机号
     * @return 员工
     */
    @Override
    public Staff selectPhone(long phone) {
        return baseMapper.selectPhone(phone);
    }

    /**
     * 查询邮箱指定返回的员工
     *
     * @param email 邮箱
     * @return 员工
     */
    @Override
    public Staff selectEmail(String email) {
        return baseMapper.selectEmail(email);
    }

    /**
     * 查询员工工资号
     *
     * @param uid 员工id
     * @return 员工工资号
     */
    @Override
    public String selectSalaryUid(String uid) {
        return baseMapper.selectSalaryUid(uid);
    }
}
